Lambda(Go)でTiDB Cloud(Serverless)にSQLを実行してみた
こんにちは、ゲームソリューショングループのsoraです。
今回は、Lambda(Go)でTiDB Cloud(Serverless)にSQLを実行してみたことについて書いていきます。
はじめに
TiDBはクラウドネイティブな分散型のNewSQLデータベースです。
TiDB CloudはTiDBをフルマネージドでクラウド上で使えるサービスです。
詳細については、以下記事をご参照ください。
TiDB Cloudでの接続準備
データインポート
ClusterはServerlessで既に起動していることとして、そのClusterにテスト用のデータをインポートします。
Clusterを選択>Importで、CSVファイルやS3からデータをアップロードしてデータのインポートができます。
今回は以下のCSVファイルをインポートしました。
prefecturename,prefecturalcapital,region Hokkaido,Sapporo,Hokkaido Tokyo,Tokyo,Kanto Aichi,Nagoya,Chubu Osaka,Osaka,Kansai Hukuoka,Hakata,Kyushu
インポートすると、カラム名やデータタイプ、プライマリーキーの確認が出てきます。
選択した後に[Start Import]を押下すると、インポートが始まります。
Chat2QueryにてSQLで確認すると正常にインポートされていることが確認できます。
接続情報取得
接続するためのコードは、Clusterを選択>Connectで確認することができます。
今回はLambda(Go)から接続するため、Connect WithでGoを選択しています。
このコードはLambdaにて使用するため、メモしておきます。
Lambda作成
次にLambdaを作成します。
先ほど取得した接続情報を使ってDBに接続し、SELECTを実行しています。
package main import( "database/sql" "github.com/go-sql-driver/mysql" "github.com/aws/aws-lambda-go/lambda" "fmt" "crypto/tls" ) func TiDBOperation() () { // TiDBへの接続 mysql.RegisterTLSConfig("tidb", &tls.Config{ MinVersion: tls.VersionTLS12, ServerName: "[TiDB Cloudで表示された接続コード]", }) db, err := sql.Open("mysql", "[TiDB Cloudで表示された接続コード]") if err != nil { fmt.Println("DB connection error") } defer db.Close() // SQL実行 rows, err := db.Query("SELECT * from PrefecturesTable") if err != nil { fmt.Println("SQL error") } defer rows.Close() fmt.Println("都道府県名, 県庁所在地, 地域") for rows.Next() { var prefecturename, prefecturalcapital, region string err := rows.Scan(&prefecturename, &prefecturalcapital, ®ion) if err != nil { fmt.Println("Scan error") return } fmt.Printf("%s, %s, %s\n", prefecturename, prefecturalcapital, region) } } func main() { lambda.Start(TiDBOperation) }
LambdaからTiDB Cloud上のDBへ接続
Lambdaを実行してデータベース内のデータが返ってくることを確認できました。
最後に
今回は、Lambda(Go)でTiDB Cloud(Serverless)にSQLを実行してみたことを記事にしました。
どなたかの参考になると幸いです。